import { assertEquals } from "asserts";

import getCoprimes from "./index.ts";

Deno.test("tree-of-coprimes", () => {
    const inputs: [nums: number[], edges: number[][]][] = [
        [
            [2, 3, 3, 2],
            [
                [0, 1],
                [1, 2],
                [1, 3],
            ],
        ],
        [
            [5, 6, 10, 2, 3, 6, 15],
            [
                [0, 1],
                [0, 2],
                [1, 3],
                [1, 4],
                [2, 5],
                [2, 6],
            ],
        ],
        [
            [
                18,
                10,
                23,
                47,
                11,
                20,
                7,
                44,
                14,
                43,
                43,
                42,
                2,
                23,
                5,
                31,
                18,
                40,
                49,
                27,
                50,
                21,
                19,
                35,
                23,
                30,
                31,
                8,
                7,
                50,
                7,
                11,
                4,
                43,
                1,
                5,
                24,
                44,
                24,
                25,
                24,
                19,
                48,
                5,
                37,
                13,
                50,
                6,
                20,
                38,
                43,
                45,
                34,
                15,
                42,
                41,
                5,
                44,
                16,
                21,
                26,
                31,
                12,
                35,
                13,
                36,
                2,
                21,
                29,
                36,
                7,
                24,
                1,
                37,
                40,
                6,
                19,
                30,
                12,
                42,
                30,
                50,
                20,
                15,
                34,
                36,
                49,
                2,
                34,
                36,
                38,
                8,
                11,
                33,
                46,
                19,
                24,
                41,
                2,
                31,
                14,
                32,
                9,
                29,
                12,
                6,
                45,
                47,
                32,
                24,
                37,
                4,
                25,
                50,
                24,
                10,
                31,
                40,
                5,
                12,
                22,
                7,
                23,
                2,
                27,
                42,
                8,
                6,
                1,
                15,
                16,
                32,
                32,
                38,
                29,
                24,
                33,
                22,
                33,
                29,
                17,
            ],
            [
                [57, 0],
                [5, 57],
                [76, 5],
                [85, 76],
                [46, 85],
                [127, 85],
                [25, 0],
                [114, 25],
                [7, 114],
                [45, 114],
                [100, 25],
                [122, 100],
                [17, 122],
                [12, 17],
                [48, 100],
                [40, 48],
                [60, 40],
                [88, 48],
                [108, 48],
                [10, 108],
                [11, 10],
                [121, 11],
                [9, 121],
                [109, 11],
                [111, 109],
                [91, 109],
                [118, 91],
                [53, 118],
                [26, 53],
                [47, 26],
                [126, 47],
                [133, 109],
                [123, 133],
                [59, 123],
                [81, 48],
                [31, 81],
                [15, 31],
                [24, 15],
                [132, 81],
                [119, 132],
                [21, 119],
                [63, 81],
                [128, 63],
                [73, 128],
                [34, 63],
                [72, 34],
                [38, 72],
                [97, 72],
                [3, 97],
                [30, 3],
                [13, 30],
                [80, 13],
                [33, 80],
                [66, 80],
                [102, 66],
                [8, 80],
                [77, 8],
                [79, 77],
                [42, 79],
                [19, 42],
                [78, 19],
                [20, 78],
                [55, 79],
                [37, 55],
                [49, 37],
                [89, 49],
                [36, 89],
                [83, 89],
                [95, 49],
                [64, 95],
                [28, 64],
                [32, 28],
                [92, 32],
                [93, 92],
                [86, 93],
                [39, 86],
                [87, 39],
                [2, 87],
                [134, 93],
                [135, 49],
                [110, 3],
                [29, 110],
                [52, 29],
                [136, 29],
                [99, 136],
                [50, 99],
                [84, 50],
                [56, 84],
                [51, 99],
                [112, 51],
                [101, 112],
                [41, 29],
                [74, 41],
                [103, 74],
                [129, 74],
                [6, 129],
                [137, 129],
                [61, 29],
                [104, 61],
                [131, 104],
                [58, 104],
                [14, 58],
                [18, 14],
                [138, 18],
                [117, 138],
                [125, 138],
                [106, 125],
                [120, 18],
                [130, 120],
                [124, 130],
                [62, 124],
                [82, 62],
                [4, 62],
                [113, 4],
                [139, 130],
                [1, 104],
                [67, 1],
                [70, 1],
                [43, 70],
                [96, 70],
                [98, 96],
                [69, 98],
                [94, 69],
                [115, 94],
                [75, 1],
                [44, 75],
                [68, 44],
                [16, 68],
                [54, 68],
                [65, 68],
                [27, 65],
                [71, 65],
                [105, 65],
                [35, 105],
                [107, 65],
                [116, 65],
                [90, 116],
                [23, 90],
                [140, 1],
                [22, 140],
            ],
        ],
    ];
    const outputs = [
        [-1, 0, 0, 1],
        [-1, 0, -1, 0, 0, 0, -1],
        [
            -1,
            61,
            87,
            97,
            62,
            -1,
            129,
            -1,
            13,
            121,
            108,
            10,
            122,
            30,
            58,
            31,
            68,
            122,
            14,
            8,
            19,
            132,
            140,
            90,
            15,
            -1,
            53,
            68,
            64,
            110,
            3,
            81,
            28,
            80,
            63,
            105,
            55,
            55,
            72,
            86,
            -1,
            29,
            13,
            70,
            75,
            114,
            76,
            26,
            -1,
            55,
            99,
            99,
            110,
            91,
            68,
            79,
            84,
            -1,
            61,
            123,
            -1,
            29,
            18,
            0,
            95,
            68,
            13,
            1,
            44,
            70,
            1,
            68,
            34,
            128,
            41,
            61,
            5,
            13,
            13,
            13,
            13,
            -1,
            124,
            49,
            50,
            76,
            93,
            39,
            -1,
            55,
            116,
            10,
            32,
            32,
            70,
            37,
            70,
            72,
            70,
            136,
            -1,
            112,
            66,
            74,
            61,
            68,
            18,
            65,
            -1,
            10,
            3,
            10,
            99,
            4,
            -1,
            70,
            65,
            138,
            91,
            -1,
            18,
            10,
            100,
            10,
            130,
            14,
            26,
            76,
            63,
            41,
            18,
            61,
            -1,
            10,
            93,
            55,
            29,
            129,
            18,
            130,
            1,
        ],
    ];
    assertEquals(
        inputs.map((a) => getCoprimes(...a)),
        outputs,
    );
});
